package borrador.grafica;

import java.awt.Point;

import javax.swing.UIManager;

import logica.AtributoRepetidoException;
import logica.AtributoSimpleException;
import logica.EntidadRepetidaException;
import logica.IdExternoInexistenteException;
import logica.Proyecto;
import logica.SinNombreException;
import vista.objetos.AtributoTipoNoSoportadoException;
import vista.objetos.DiagramaGraficable;
import vista.objetos.EntidadGraficable;
import vista.objetos.EntidadTipoNoSoportadoException;
import vista.objetos.GraficableException;
import vista.objetos.ProyectoGraficable;
import borrador.AtributoCompuestoEjemplo;
import controlador.ControladorEditor;

/* para probar la visualización y representación de los atributos compuestos */

public class AtributoCompuestoEjemploGraficable {

	public ProyectoGraficable proyectoGraficable;

	public AtributoCompuestoEjemploGraficable() throws SecurityException, SinNombreException, AtributoRepetidoException, AtributoSimpleException, EntidadRepetidaException, IdExternoInexistenteException, EntidadTipoNoSoportadoException, AtributoTipoNoSoportadoException, GraficableException 
	{
		/*creo el proyecto lógico para la prueba*/
		AtributoCompuestoEjemplo atriCompEj = new AtributoCompuestoEjemplo();
		
		/*obtengo el proyecto logico*/
		Proyecto proyectoLogico = atriCompEj.getProyecto();
		
		/*para poder guardar el proyecto - sobreescribe archivos*/
		proyectoGraficable = TransformadorAGraficable.setInformacionParaGuardar(proyectoLogico);
		
		/*creo un proyecto graficable. Hay que convertir todos los diagramas logicos que tenga
		 * a diagramas graficables y luego crear el proyecto graficable*/
		crearDiagramasGraficables(proyectoLogico);
		
		/*diagramas graficables del proyecto*/
		DiagramaGraficable diagramaPpal  = proyectoGraficable.getDiagramaActual();

		/*creo las entidades graficables correspondientes al modelo lógico*/
		EntidadGraficable entidad = crearEntidadGraficable(atriCompEj);
		
		/*agrego la entidad al diagrama*/
		diagramaPpal.agregarGraficable(entidad);

		ControladorEditor controlador = ControladorEditor.getInstancia();
		controlador.abrirVentanaEditor(proyectoGraficable);
	}
	
	private EntidadGraficable crearEntidadGraficable(AtributoCompuestoEjemplo ejemplo) throws EntidadTipoNoSoportadoException, AtributoTipoNoSoportadoException, GraficableException
	{
		EntidadGraficable entidad = TransformadorAGraficable.getEntidadGraficable(ejemplo.getEntidad());
		entidad.getPunto().setLocation(new Point(200, 300));
		entidad.setAtributos(TransformadorAGraficable.getAtributoGraficables(ejemplo.getEntidad().getAtributos()));
		
		entidad.inicializarPosiciones();

		return entidad;
	}

	private void crearDiagramasGraficables(Proyecto proyectoLogico)
	{
		DiagramaGraficable diagramaGraficablePpal = new DiagramaGraficable(proyectoLogico.getDiagramaPpal());
		
		if(proyectoGraficable == null)
			proyectoGraficable = new ProyectoGraficable(proyectoLogico, diagramaGraficablePpal);
		else
		{
			proyectoGraficable.setDiagramaPpal(diagramaGraficablePpal);
			proyectoGraficable.setDiagramaActual(diagramaGraficablePpal);
			proyectoGraficable.setProyecto(proyectoLogico);
		}	
	}
	
	public static void main(String[] args) 
	{
		String l_f;
		l_f = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel";

		try {
			UIManager.setLookAndFeel(l_f);
			new AtributoCompuestoEjemploGraficable();
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}
